﻿//845. 数组中的最长山脉
//把符合下列属性的数组 arr 称为 山脉数组 ：
//arr.length >= 3 存在下标 i（0 < i < arr.length - 1），
//满足 arr[0] < arr[1] < ... < arr[i - 1] < arr[i] arr[i] > arr[i + 1] > ... > arr[arr.length - 1]
//给出一个整数数组 arr，返回最长山脉子数组的长度。如果不存在山脉子数组，返回 0 。


class Solution {
public:
    int longestMountain(vector<int>& arr)
    {
        int ans = 0;
        int n = arr.size();
        for (int i = 0; i < n;)
        {
            int j = i + 1;
            //找山峰 山峰为j-1
            while (j<n && arr[j]>arr[j - 1])
            {
                j++;
            }
            if (j == i + 1)
            {
                i = j;
                continue;
            }
            //找山脚
            while (j < n && arr[j] < arr[j - 1])
            {
                j++;
            }
            if ((j - i) >= 3 && arr[j - 1] < arr[j - 2])
            {
                ans = max(ans, j - i);
            }
            i = j - 1;
        }
        return ans;
    }
};